// #include "UdpServer.hpp"
// #include <memory>

// Log lg;

// void Usage(std::string proc)
// {
//     std::cout << "\n Usage: " << proc << "port[1024+]" << std::endl;
// }

// // ./udpserver [1024+]
// int main(int argc, char* argv[])
// {
//     if(argc != 2)
//     {
//         Usage(argv[0]);
//         exit(0);
//     }
//     uint16_t port = std::stoi(argv[1]);
//     //std::unique_ptr<UdpServer> svr(new UdpServer(8080,"116.205.168.196")); //云服务器禁止直接绑定公网ip
//     //std::unique_ptr<UdpServer> svr(new UdpServer(1021));
//     std::unique_ptr<UdpServer> svr(new UdpServer(port));

//     svr->Init();
//     svr->Run();
//     return 0;
// }

#include "UdpServer.hpp"
#include <memory>
#include <vector>
#include <string>
#include <cstdio>

// "120.78.126.148" 点分十进制字符串风格的IP地址

void Usage(std::string proc)
{
    std::cout << "\n\rUsage: " << proc << " port[1024+]\n" << std::endl;
}

// std::string Handler(const std::string &str)
// {
//     std::string res = "Server get a message: ";
//     res += str;
//     std::cout << res << std::endl;

//     // pid_t id = fork();
//     // if(id == 0)
//     // {
//     //     // ls -a -l -> "ls" "-a" "-l"
//     //     // exec*();
//     // }
//     return res;
// }

// bool SafeCheck(const std::string &cmd)
// { 
//     bool safe = true;
//     std::vector<std::string> lock_cmd = {"rm","cp", "mv"};//... 
//     for(auto & e : lock_cmd)
//     {
//         auto pos = cmd.find(e);
//         if(pos != std::string::npos) 
//             safe = false;
//     }

//     return safe;
// }


// std::string ExcuteCommand(const std::string &cmd)
// {
//     if(!SafeCheck(cmd))
//         return "Excute Err";

//     FILE *fp = popen(cmd.c_str(), "r");//popen函数会为我们创建子进程执行命令，并把结果存放到管道中，最后返回给父进程。
//     if(nullptr == fp)
//     {
//         perror("popen");
//         return "error";
//     }
//     std::string result;
//     char buffer[4096];
//     while(true)
//     {
//         char *ok = fgets(buffer, sizeof(buffer), fp);
//         if(ok == nullptr) break;
//         result += buffer;
//     }
//     pclose(fp);

//     return result;
// }

// ./udpserver port
int main(int argc, char *argv[])
{
    if(argc != 2)
    {
        Usage(argv[0]);
        exit(0);
    }

    uint16_t port = std::stoi(argv[1]);

    std::unique_ptr<UdpServer> svr(new UdpServer(port));

    svr->Init(/**/);
    svr->Run();

    return 0;
}